from functools import wraps

def component(*args, **kwargs):
    """
    类装饰器：三种用法 默认都是单例
    1) @component
    2) @component()
    3) @component(False) 或 @component(singleton=False)
    """
    # 情况 1：无括号 —— 唯一实参就是类本身
    if len(args) == 1 and callable(args[0]) and not kwargs:
        cls = args[0]
        setattr(cls, 'xin_cls', True)   # 默认 True
        return cls

    # 情况 2 / 3：带括号 —— 返回真正的装饰器
    def decorator(cls):
        # 支持位置参数或关键字参数
        singleton = args[0] if args else kwargs.get('singleton', True)
        setattr(cls, 'xin_cls', bool(singleton))
        return cls

    return decorator